썸네일: Unsplash의Paul Hanaoka
출처 : 웹 성능 최적화 기법
웹 성능 최적화 기법(루비페이퍼 사) 도서에 대한 핵심 내용과 지식을 정리한 포스트입니다. 포스트에 올라오는 내용은 도서의 일부이기 때문에 더 자세한 내용이 궁금하신 분들은 출처에서 도서를 구매해 읽어보시는 것을 추천드립니다.
7.3 다중 캐시 전략
- CDN에 콘텐츠를 캐시해도 캐시가 100% 보장이 되지는 않기 때문에 극대화할 수 있는 방안을 고려해야함
- 다중 캐시는 사용자와 서버 사이에 여러 개의 캐시 계층을 주어 캐시 효율을 극대화하는 기술
7.3.1 캐시 축출
- CDN 캐시 서버는 제한된 용량으로 많은 양의 콘텐츠를 캐시해야 하며, 용량이 일정 한계치에 도달하면 콘텐츠에 우선순위를 부여해 낮은 순위의 콘텐츠부터 삭제함(캐시 축출, cache eviction)
- 일정 기간 캐시 적중(cache hit)이 없었던 콘텐츠
- 캐시 적중률(cache hit rate)이 미미한 콘텐츠
- 더 오래된 콘텐츠
- 캐시 서버 사용량이 임계치에 도달하면 규칙에 의해 정해진 우선 순위에 따라 낮은 순위의 콘텐츠를 삭제하고 새로운 콘텐츠 개시
7.3.2 롱테일 콘텐츠
- 특정 콘텐츠가 캐시에서 축출되는 주 이유는 물리적 한계 및 콘텐츠 캐시 적중률이 낮기 때문
- 생성 초기 많이 조회되다가 짧은 시간이 흐른 후 조회 수가 확 줄고 이후 거의 조회되지 않는 콘텐츠를 롱테일 콘텐츠(Longtail Contents)라 한다.
- 소셜 미디어 콘텐츠 , 온라인 쇼핑몰 상품 이미지 등
7.3.3 캐시 서버 간 캐시 콘텐츠 공유
- 기본적으로 사용자가 많을수록 캐시 적중률은 높아지지만, 콘텐츠들은 분산된 에지 서버들에 따로 저장되어있기 때문에 하나의 에지 서버를 기준으로 하면 실제 적중률은 매우 낮다.
- 분산된 에지 서버들을 하나의 서버처럼 공유하여 사용하기 위해 ICP(Internet Cache Protocol) 같은 프로토콜을 사용해서 공유가 이뤄진다.
7.3.4 다중 계층 캐시
- 다중 계층 캐시란, 에지 서버들과 원본 서버 사이에 추가 캐시 서버 계층(부모 계층)을 두어 같은 콘텐츠를 여러 번 캐시하는 방식
- 추가 캐시 계층을 통한 공유 효과를 얻기 위한 조건
- 부모 계층은 원본 서버에 가까이 존재
- 부모 계층의 캐시 서버 수가 자식 계층 서버 수보다 훨씬 적어야함
- 다중 계층 캐시 효과
- 캐시 적중률 향상
- 과도한 트래픽으로부터 원본 서버 보호
- 사용자 요청에 대한 응답 속도 향상
7.4 전달 경로 최적화
- 전달 경로 최적화는 애플리케이션 응답 속도를 빠르게 하는 주요 기능 (API 호출, 캐시 만료 콘텐츠 불러오기 등)
- 전달 경로를 최적화하기 위해 경로를 라스트 마일, 미들 마일, 퍼스트 마일 세 구간으로 나눌 수 있다.
- 라스트 마일 : 최종 사용자 - CDN 에지 서버 간 구간
- 미들 마일 : CDN 네트워크 구간
- 퍼스트 마일 : 에지 서버 - 원본 서버 구간
7.4.1 라스트 마일 최적화
- 최종 사용자 요청을 사용자와 가장 가까운 곳에 있는 에지 서버에 전송하는 일
- 에지 서버 선택 방법은 크게 2가지로 나뉜다.
- DNS 기반 에지 선택
- 애니캐스트 기반 에지 선택
DNS 기반 에지 선택
- 사용자 브라우저에 최종적으로 에지 서버의 IP를 전달하는 시스템은 DNS이기 때문에 CDN 서비스 업체들은 평소 에지 서버를 모니터링 하다가 자사 DNS 서버로 특정 웹 사이트 도메인명에 대한 쿼리가 요청되면 사용자 로컬 DNS와 가장 가깝고 사용량이 적은 에지 서버의 IP를 반환한다.
- DNS 쿼리에는 사용자 기기 정보 IP가 포함되어 있지 않아 실제 사용자 위치를 정확히 알아낼 수는 없지만, 로컬 DNS IP 정보가 포함되어 있어 짐작할 수 있음
애니캐스트 기반 에지 선택
- 네트워크에서 데이터를 전송하는 여러 방식 중 유니캐스트 방식이 흔히 사용됨
- 유니캐스트 방식은 송신 측 - 수신 측이 1:1로 통신하는 방식
- 멀티캐스트 : 1 : N 방식
- 브로드캐스트 : 불특정 다수
- 애니캐스트는 1:1 전송 방식이지만 유니캐스트와 달리 다수 노드가 같은 IP 주소를 가지며, 보내는 측이 해당 IP 주소로 메시지를 보낼 때 네트워크 상 가장 가까운 노드를 선택해 전송하는 방식
- 보내는 측의 라우터(router)와 경계 경로 프로토콜(Board Gateway Protocol, BGP)에 의해 전송 노드 결정
- 애니캐스트 기반 에지 선택 방식에서 CDN 제공자는 모든 에지에 동일 IP를 부여하거나 지역별 클러스트를 만들어 클러스트마다 다른 IP를 부여하기도 한다.
- 장점 중 하나는 실제 사용자와 가장 가까운 네트워크의 에지 서버가 선택된다는 점. 단, 실제 사용자와 지리적으로 가장 가까운 에지 선택을 보장하지는 않음
- 애니캐스트에서 사용되는 BGP는 지리적 경로보다 ISP 정책에 따른 경로(네트워크적으로 가장 가까운 경로)를 선택하기 때문
- BGP를 통한 경로 탐색 시 에지 서버들 성능 상태를 고려하지 않아 수행되지 않을 수도 있음
- 퍼스트 마일에서는 최적의 원본 서버를 찾는다.
- 미들 마일에서는 사용자 요청을 받은 에지 서버와 원본 서버 간 가장 빠른 네트워크 경로를 찾는다.
7.4.2 프로토콜 최적화
- 경로 최적화가 빠른 길을 찾는 과정이라면, 프로토콜 최적화는 한번에 많은 트래픽을 보낼 수 있도록 길을 넓히는 작업
- 웹 트래픽은 HTTP 기반, HTTP는 TCP/IP 프로토콜 기반으로 동작하므로 3-way handshake 방식으로 TCP를 연결해 본격적으로 데이터 패킷을 주고받는다.
- 이때 가능하면 많은 패킷을 보내는 것이 유리
TCP 최적화
- 모든 네트워크 참여자들이 무분별하게 많은 패킷들을 한번에 보내면 공용으로 써야하는 네트워크가 혼잡해지기 때문에 이를 제어하기 위해 느린 시작(slow start)이라는 알고리즘을 사용한다.
- 송신 측이 전송을 시작할 때 적은 양의 데이터부터 전송하는 것을 의미
- TCP 최적화를 위해선 미들 마일에서 네트워크가 잘 관리되고 있고 양호하다는 전제가 필요함
- 초기 혼잡 윈도우 값을 늘려 한번에 많은 데이터 패킷을 보낼 수 있게 함
- RTO값을 낮춰 실패한 패킷을 빠르게 재전송
TLS종료와 TCP 연결 재사용
- 클라이언트와 서버는 HTTP 통신을 위해 TCP 연결에 더해 상호 인증서를 확인하고 메시지를 암호화하기 위한 TLS handshake를 수행한다.
- CDN을 사용하면 최종 사용자는 CDN과 TCP 연결을 맺고 CDN은 원본 서버와 또 다른 TCP 연결을 생성한다.
- 즉, TLS handshake는 최종사용자 - CDN, CDN - 원본 사이에 한 번씩 발생
- CDN 서비스 제공자들은 효율성을 높이기 위해 원본 서버와 TCP 연결을 끊지 않고 재사용 하며, 최종 사용자는 멀리 떨어진 원본 서버가 아닌 가장 가까운 에지 서버와 TCP, TLS handshake를 수행하므로 응답 속도가 개선된다.